import request from '@/utils/request'

/**
 * 获取Twitter用户列表
 * @param {Object} params 查询参数
 * @returns {Promise}
 */
export function getTwitterList(params) {
  return request({
    url: '/api/twitter/list',
    method: 'post',
    data: params
  })
}

/**
 * 导出Twitter用户数据
 * @param {Object} params 查询参数
 * @returns {Promise}
 */
export function exportTwitterData(params) {
  return request({
    url: '/api/twitter/export',
    method: 'post',
    data: params
  })
}

/**
 * 获取Twitter用户详情
 * @param {number} id Twitter用户ID
 * @returns {Promise}
 */
export function getTwitterUserDetail(id) {
  return request({
    url: `/api/twitter/${id}`,
    method: 'get'
  })
}

/**
 * 获取Twitter用户数据
 * @param {Object} params - 查询参数
 * @returns {Promise} 返回Promise对象
 */
export function getTwitterUsers(params) {
  return request({
    url: '/twitter/users',
    method: 'get',
    params,
    timeout: 60000,  // 增加超时时间到60秒
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
  }).then(response => {
    // 处理不同结构的响应
    let processedData = processTwitterResponse(response);
    
    // 确保数字字段正确转换
    if (Array.isArray(processedData)) {
      processedData = processedData.map(user => normalizeTwitterUser(user));
    }
    
    return processedData;
  }).catch(error => {
    // console.error('获取Twitter用户数据异常:', error);
    // console.error('连接后端API时出错，请确保后端服务正常运行');
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 筛选Twitter用户数据
 * @param {Object} params - 筛选参数
 * @returns {Promise} 返回Promise对象
 */
export function filterTwitterUsers(params) {
  return request({
    url: '/api/twitter/filter',
    method: 'post',
    data: params
  })
}

/**
 * 获取符合条件的Twitter用户数量
 * @param {Object} params 查询参数
 * @returns {Promise} 返回Promise对象
 */
export function getTwitterCount(params) {
  return request({
    url: '/twitter/count',
    method: 'post',
    data: params,
    headers: {
      'Content-Type': 'application/json'
    }
  })
}

/**
 * 获取用户余额信息
 * @returns {Promise} 返回Promise对象
 */
export function getUserBalanceInfo() {
  return request({
    url: '/api/balance/info',
    method: 'get'
  })
}

/**
 * 处理Twitter响应数据，从不同格式中提取用户数组
 * @param {Object|Array} response - 原始响应
 * @returns {Array} - 处理后的Twitter用户数组
 */
function processTwitterResponse(response) {
  if (!response) return [];
  
  let result = [];
  
  if (Array.isArray(response)) {
    result = response;
  } else if (typeof response === 'object') {
    // 处理不同层级的嵌套结构
    if (response.code === 200 && response.data) {
      if (Array.isArray(response.data)) {
        result = response.data;
      } else if (response.data.records && Array.isArray(response.data.records)) {
        result = response.data.records;
      } else if (response.data.data && Array.isArray(response.data.data)) {
        result = response.data.data;
      }
    } else if (response.records && Array.isArray(response.records)) {
      result = response.records;
    } else if (Array.isArray(response.data)) {
      result = response.data;
    } else if (response.content && Array.isArray(response.content)) {
      result = response.content;
    }
  }
  
  return result;
}

/**
 * 规范化Twitter用户数据，确保数字字段是数字类型
 * @param {Object} user - 原始用户数据
 * @returns {Object} - 处理后的用户数据
 */
function normalizeTwitterUser(user) {
  if (!user) return {};
  
  const normalizedUser = { ...user };
  
  // 确保这些字段是数字类型
  const numericFields = [
    'followersCount',
    // 'friendsCount', // 好友数量字段 - 已注释掉
    // 'statusesCount', // 推文数量字段 - 已注释掉
    // 'listedCount', // 列表数量字段 - 已注释掉
    'favouritesCount', 'twitterId'
  ];
  
  numericFields.forEach(field => {
    if (normalizedUser[field] !== undefined) {
      // 将字符串转换为数字
      if (typeof normalizedUser[field] === 'string') {
        const parsedValue = parseInt(normalizedUser[field], 10);
        normalizedUser[field] = isNaN(parsedValue) ? null : parsedValue;
      }
    } else {
      // 处理驼峰命名和下划线命名的转换
      const snakeField = field.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
      if (normalizedUser[snakeField] !== undefined) {
        const parsedValue = typeof normalizedUser[snakeField] === 'string' 
          ? parseInt(normalizedUser[snakeField], 10)
          : normalizedUser[snakeField];
        normalizedUser[field] = isNaN(parsedValue) ? null : parsedValue;
      } else {
        // 不设置默认值，保持字段为undefined
        // 这样前端可以清楚地知道哪些字段后端没有返回
      }
    }
  });
  
  // 如果后端返回的是下划线格式，需要转换为驼峰格式
  const fieldMappings = {
    'followers_count': 'followersCount',
    // 'friends_count': 'friendsCount', // 好友数量字段映射 - 已注释掉
    // 'statuses_count': 'statusesCount', // 推文数量字段映射 - 已注释掉
    // 'listed_count': 'listedCount', // 列表数量字段映射 - 已注释掉
    'favourites_count': 'favouritesCount',
    'twitter_id': 'twitterId',
    'screen_name': 'screenName',
    'created_at': 'createdAt',
    'last_status_created_at': 'lastStatusCreatedAt',
    'last_status_source': 'lastStatusSource'
  };
  
  Object.entries(fieldMappings).forEach(([snakeField, camelField]) => {
    if (normalizedUser[snakeField] !== undefined && normalizedUser[camelField] === undefined) {
      normalizedUser[camelField] = normalizedUser[snakeField];
      // 如果是数字字段，确保转换为数字
      if (numericFields.includes(camelField) && typeof normalizedUser[camelField] === 'string') {
        const parsedValue = parseInt(normalizedUser[camelField], 10);
        normalizedUser[camelField] = isNaN(parsedValue) ? null : parsedValue;
      }
    }
  });
  
  return normalizedUser;
}

/**
 * 导出Twitter用户数据
 * @param {Object} params 查询参数
 * @returns {Promise} 导出结果
 */
export function exportTwitterUsers(params) {
  // 分离参数，exportCount放在URL参数
  const exportCount = params.exportCount;
  delete params.exportCount;
  
  return request({
    url: `/twitter/export?exportCount=${exportCount}`,
    method: 'post',
    data: params,
    responseType: 'blob',  // 设置响应类型为blob
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    },
    timeout: 600000,  // 增加到10分钟以支持大数据量导出
    retry: 1,  // 添加重试机制
    retryDelay: 2000,  // 增加重试延迟到2秒
    meta: {
      isExport: true  // 标记为导出请求
    }
  });
} 

/**
 * 获取Twitter用户完整联系信息
 * @param {string|number} sourceId 数据源ID
 * @param {string} sourceTable 数据源表名
 * @param {string} field 需要获取完整信息的字段名
 * @returns {Promise} 返回Promise对象
 */
export function getTwitterFullContactInfo(sourceId, sourceTable, field) {
  return request({
    url: `/twitter/contact/full`,
    method: 'get',
    params: { sourceId, sourceTable, field },
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
  })
} 